package edu.whut.Polymorphism;

/*
多态的前提：
    有继承/实现关系
    有方法重写
    有 父类引用 指向 子类对象
多态分类：
    1.对象多态，将方法的形参定义为父类类型，这个方法就可以接受到该父类任意子类对象了
    2.行为多态：同一个方法具有多种不同表现形式 或形态 的能力(例子见order包)
 */
public class duotai01 {
    public static void main(String[] args) {
        //父类引用指向子类对象
        Animal a1 = new Dog();
        Animal a2 = new Cat();

        //  useAnimal(new Dog());
        useAnimal(new Cat());

    }
    public static void useAnimal(Animal a){
        a.eat();

    }
}
abstract class Animal{
    public abstract void eat();
}
class Dog extends Animal{

    @Override
    public void eat() {
        System.out.println("狗吃屎");
    }
}
class Cat extends Animal{

    @Override
    public void eat() {
        System.out.println("猫吃老鼠");
    }
}